import {def} from "./utils";
// 数组改写7个方法 push pop  shift unshift splice sort reverse
// Array.prototype上的方法
const arrayPrototype = Array.prototype;
export const arrayMethods = Object.create(arrayPrototype)
const methodsNeedChange = ['push','pop','shift','unshift','splice','sort','reverse']
methodsNeedChange.forEach(methodName =>{
  // 本分原来的方法
  const original = arrayPrototype[methodName]
  def(arrayMethods,methodName,function () {
    // this是数组的this,数组的this加上数组的arguments给到了original原有数组的方法
    const result =  original.apply(this,arguments)
    // 数组身上的__ob__取出来
    const ob = this.__ob__;
    let inserted= [];
    switch (methodName) {
      case 'push':
      case 'unshift':
        inserted = [...arguments];
        break;
      case 'splice':
        inserted = [...arguments].slice(2)
        break;
    }
    // 判断有没有新项目
    if(inserted) {
      ob.observeArray(inserted)
    }
    console.log('哈哈哈哈哈');
    ob.dep.notify()
    return result
  },false);
})